package com.nebula.tlggoods.controller;


import com.nebula.tlggoods.entity.Goods;
import com.nebula.tlggoods.service.GoodsService;
import com.nebula.tlggoods.tools.Record;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 商品控制层
 */
@RestController
public class GoodsController {

    @Resource
    private GoodsService goodsService;

    /**
     * 模糊查询并分页、排序
     *
     * @param pageNum  页码
     * @param keyword  关键字 用于搜索功能模糊查询商品
     * @param shopId   店铺id  用于查询店铺所有商品
     * @param sortFlag 排序 0综合，1销量，2价格，3访问量
     * @return
     */
    @GetMapping("/goodsList")
    @ApiOperation(notes = "主页商品列表，可根据关键字查询商品", value = "商品列表")
    public Record goodsList(Integer pageNum, Integer pageSize, String keyword, Integer shopId, Integer sortFlag) {
        return goodsService.findAllByFuzzyNameAndPaging(pageNum, pageSize, keyword, shopId, sortFlag);
    }

    /**
     * 热门推荐
     *
     * @return
     */
    @GetMapping("/popularGoods")
    @ApiOperation(notes = "主页热门商品推荐", value = "热门推荐")
    public Record popularGoods() {
        return goodsService.findPopularGoods();
    }

    /**
     * 商品详情
     * 根据商品编码得到商品详情
     *
     * @param goodsCode 商品编码
     * @return
     */
    @GetMapping("/goodsParticularsByGoodsCode")
    @ApiOperation(notes = "根据商品编码得到商品详情", value = "商品详情(商品编码)")
    public Record GoodsParticularsByGoodsCode(String goodsCode) {
        return goodsService.findGoodsParticularsByGoodsCode(goodsCode);
    }

    /**
     * 同类商品
     * 根据三级分类id得到所有同分类商品
     *
     * @param typeId 三级分类id
     * @return
     */
    @GetMapping("/goodsParticularsByTypeId")
    @ApiOperation(notes = "根据三级分类id得到所有同分类商品", value = "商品详情(分类id)")
    public Record goodsParticularsByTypeId(Integer typeId) {
        return goodsService.findGoodsByTypeId(typeId);
    }

    /**
     * 相似推荐
     * 根据商品编码得到对应的分类id,查询同分类访问量前十的商品
     *
     * @param goodsCode 商品编码
     * @return
     */
    @GetMapping("/similarityGoods")
    @ApiOperation(notes = "根据商品编码得到对应的分类id,查询同分类访问量前十的商品", value = "相似推荐")
    public Record SimilarityGoods(String goodsCode) {
        return goodsService.findSimilarityGoods(goodsCode);
    }

    /**
     * 上下架
     *
     * @param saleId  0下架，1上架
     * @param goodsId 商品id
     * @return
     */
    @PutMapping("/isSale")
    @ApiOperation(notes = "上下架", value = "上下架")
    public Record isSale(Integer saleId, Integer goodsId) {
        return goodsService.isSale(saleId, goodsId);
    }


    /**
     * 删除商品
     *
     * @param goodsId 商品id
     * @return
     */
    @PutMapping("/delGoods")
    @ApiOperation(notes = "根据商品id删除商品", value = "删除商品")
    public Record delGoods(Integer goodsId) {
        return goodsService.delGoods(goodsId);
    }


    /**
     * 添加商品
     *
     * @param goods 商品对象
     * @return
     */
    @PostMapping("/saveGoods")
    @ApiOperation(notes = "添加商品", value = "添加商品")
    public Record saveGoods(Goods goods) {
        return goodsService.saveGoods(goods);
    }


    /**
     * 修改商品
     *
     * @param goods 商品对象
     * @return
     */
    @PutMapping("/modifyGoods")
    @ApiOperation(notes = "修改商品", value = "修改商品")
    public Record modifyGoods(Goods goods) {
        return goodsService.modifyGoods(goods);
    }

}
